#define _CRT_SECURE_NO_WARNINGS

//#include <stdio.h>
//#include <stdlib.h>

//int cmp(const void* a, const void* b)
//{
//	return *(int*)a - *(int*)b;
//}
//
//int MoreNum(int* arr, int sz)
//{
//	qsort(arr, sz, sizeof(int), cmp);
//	return arr[sz / 2];
//}
//
//int MoreNum(int* arr, int sz)
//{
//	int targe = arr[0];
//	int times = 1;
//	for (int i = 0; i < sz; i++)
//	{
//		if (times == 0)
//		{
//			targe = arr[i];
//			times++;
//		}
//		else
//		{
//			if (arr[i] == targe)
//			{
//				times++;
//			}
//			else
//			{
//				times--;
//			}
//		}
//	}
//	return targe;
//}
//
//int main()
//{
//	int arr[] = { 1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,6,2,2,5,5,3,2,3,4,2, };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//
//	printf("%d\n", MoreNum(arr, sz));
//
//	return 0;
//}



//bool hasCycle(struct ListNode* head) {
//	struct ListNode* fast = head, * slow = head;
//	while (fast && fast->next)
//	{
//		fast = fast->next->next;
//		slow = slow->next;
//		if (fast == slow)
//		{
//			return true;
//		}
//	}
//	return false;
//}

//bool hasCycle(struct ListNode* head) {
//    if (head == NULL)
//    {
//        return false;
//    }
//    struct ListNode* cur = head;
//    int count = 0;
//    while (cur)
//    {
//        if (cur->next == NULL)
//        {
//            return false;
//        }
//        else
//        {
//            cur = cur->next;
//            count++;
//        }
//        if (count == 10000)
//        {
//            break;
//        }
//    }
//    return true;
//}



#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <ctype.h>

bool isPalindrome(char* s) {
    int len = strlen(s);
    for (int i = 0; i < len; i++)
    {
        if (islower(s[i]) == 0)
        {
            s[i] = tolower(s[i]);
        }
    }
    char* left = s;
    char* right = s + len - 1;
    int flag = 0;
    while (left < right)
    {
        if ((isdigit(*left) != 0 || isalpha(*left) != 0) && (isdigit(*right) != 0 || isalpha(*right) != 0))
        {
            if (*left != *right)
            {
                flag = 1;
                break;
            }
            left++;
            right--;
        }
        else if ((isdigit(*left) == 0 || isalpha(*left) == 0) && (isdigit(*right) != 0 || isalpha(*right) != 0))
        {
            right--;
        }
        else if ((isdigit(*left) != 0 || isalpha(*left) != 0) && (isdigit(*right) == 0 || isalpha(*right) == 0))
        {
            left++;
        }
        else
        {
            left++;
            right--;
        }
    }
    if (flag == 1)
    {
        return false;
    }
    else
    {
        return true;
    }
}

int main()
{
    char arr[] = "A man, a plan, a canal: Panama";
    //gets(arr);

    printf("%d\n", isPalindrome(arr));

	return 0;
}


